package cn.jianyongjie.system.service.impl;

import cn.jianyongjie.org.domain.Department;
import cn.jianyongjie.system.domain.Menu;
import cn.jianyongjie.system.mapper.MenuMapper;
import cn.jianyongjie.system.service.IMenuService;
import cn.jianyongjie.basic.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author jianyongjie
 * @since 2022-05-13
 */
@Service
public class MenuServiceImpl extends BaseServiceImpl<Menu> implements IMenuService {
    @Autowired
    private MenuMapper menuMapper;


    /*
    * @Title: MenuServiceImpl
    * @Description: 无线极树
    * @Author: JianYongJie
    * @Version: 1.0
    * @Date:  2022/5/15 13:20
    * @Parameters: * @param
    * @Return java.util.List<cn.jianyongjie.system.domain.Menu>
    */
    @Override
    public List<Menu> findTree() {
        // 查询所有数据
        List<Menu> dept = menuMapper.loadAll();
        // 创建map集合
        HashMap<Long, Menu> deptMap = new HashMap<>();
        // 将list集合转为map集合
        for (Menu menu : dept) {
            deptMap.put(menu.getId(),menu);
        }
        // 创建一个空集合
        List<Menu> menus = new ArrayList<>();
        // 循环查询到的所有数据
        for (Menu menu : dept) {
            if (menu.getParentId()==null){
                // 将查询到的一级部门放进新的集合里面
                menus.add(menu);
            }else {
                // 根据parent_id，获取到上一级部门
                Menu menu1 = deptMap.get(menu.getParentId());
                // 判断父级对象是否为空
                if(menu1!=null){
                    // 如果不为空就将数据装到children字段里面
                    menu1.getChildren().add(menu);
                }

            }
        }
        return menus;
    }
}
